package arithmetic1.stack;

import java.util.ArrayList;
import java.util.List;

/*
    用栈来解析后缀表达式:
        从字符串左边开始解析。遇到数字就进栈，遇到符号就将栈里面最顶端两个数弹出来，用该符号运算之后再进栈
 */
public class Suffix {
    public static void main(String[] args) {
        //定义一个后缀表达式,每个字符用空格隔开
        String suffix="3 4 - 6 + 2 *";
        int result = parseSuffix(suffix);
        System.out.println(result);
    }

    //将后缀表达式每个字符存到集合里面
    public static List<String> strToList(String suffix){
        List<String> list=new ArrayList<>();
        String[] chs = suffix.split(" ");
        for (String ch:chs){
            list.add(ch);
        }
        return list;
    }

    //解析后缀表达式
    public static int parseSuffix(String suffix){
        List<String> chs=strToList(suffix);
        //定义一个栈来存储数字
        Stack stack=new Stack(10);
        //逐个解析字符数组
        for(String ch:chs){
            if (Stack.isOperation(ch)){     //该字符为运算符
                //从数栈中弹出两个数
                int num1 = stack.pop();
                int num2 = stack.pop();
                int result = Stack.cul(num1, num2, ch.charAt(0));
                //将结果进栈
                stack.push(result);
            }else{  //为数字,进栈
                stack.push(Integer.parseInt(ch));
            }
        }
        //数栈中留下来的数字就是结果
        int result=stack.pop();
        //返回结果
        return result;
    }
}
